4. 문장을 호출한 곳으로 옮기기
함수의 기능을 쪼개서 문장을 밖으로 이동
경우에 따라 문장을 더 슬라이스 하거나 함수로 추출할 수도 있음
- 함수가 둘 이상의 다른 일을 하는데, 그 중 하나만 변경이 필요할 때
절차
- 호출자가 한두 개뿐이고 피호출 함수도 간단한 단순한 상황이면, 피호출 함수의 처음(혹은 마지막)줄(들)을 잘라내어 호출자(들)로 복사해 넣는다(필요하면 적당히 수정한다). 테스트만 통과하면 이번 리팩토링은 여기서 끝이다.
- 더 복잡한 상황에서는, 이동하지 '않길' 원하는 모든 문장을 함수로 추출(6.1)한 다음 검색하기 쉬운 임시 이름을 지어준다.
- 원래 함수를 인라인(6.2)한다.
- 추출된 함수의 이름을 원래 함수의 이름으로 변경한다(6.5). (더 나은 이름이 있다면 그 이름을 쓴다)
예시 코드
😞 Before
emitPhotoData(outStream, person.photo)
function emitPhotoData(outStream, photo) {
outStream.write(`<p>제목: ${photo.title}</p>\n`)
outStream.write(`<p>위치: ${photo.location}</p>\n`)
}
😃 After
emitPhotoData(outStream, person.photo)
outStream.write(`<p>위치: ${person.photo.location}</p>\n`)
function emitPhotoData(outStream, photo) {
outStream.write(`<p>제목: ${photo.title}</p>\n`)
}